//
//  Constant.swift
//  Swift3.0_Study
//
//  Created by chengfeng on 2016/9/26.
//  Copyright © 2016年 zhaochengfeng. All rights reserved.
//

import Foundation

class BasicDemo {
    
    func start() -> Void {
        /*
         常量的定义
         
         let 常量名
         常量名可以是任意文字、长度不限。
         */
        
        let PI = 3.14159
        
        /*
         变量
         
         var 变量名
         可主动变更或者可预计期间内自动有规律或者无规律的量，比如清醒时间、风扇转动的总次数、加班时间、股票指数、驾照通过的几率。。。
         
         如何正确使用常量与变量？
         总是优先使用常量。
         交给编译器决定。
         
         */
        
        let 工资 = "18K"
        print("pi = \(PI), 工资 = \(工资)")
        
        self.dataType()
        self.tupleStudy()
        self.optionalStudy()
    }
    
    //基本数据类型
    func dataType() -> Void{
        //值的类型和类型推断
        
        /*整形（Int）
         3这样的整数,在Swift中称为Integer类型的值, 简写Int
         形式:  var 变量名 : Int = 3 .由于Swift有类型推断, 类型可以省略不写.
         */
        
        //dis自动推断为Int类型,下面两种定义是相同的
        let dis = 5
        let dis1: Int = 5
        print("dis = \(dis), dis1 = \(dis1)")
        /*浮点型 (小数)
         Swift中默认浮点型是Double(双精度)
         
         类型安全
         变量一旦定义,其类型不可更改, 即: 不能给变量一个类型不同的值.
         */
        
        //如果赋值的类型不同，编译器会报错
        var price = 3.5
        price += 1
        //    price = 1
        print("price = \(price)")
        /*布尔型: Bool, 表示逻辑上的"真"或"假"
         只有2个值,true 和 false
         */
        
        var isVip: Bool = true
        if isVip {
            isVip = !isVip
        }
    }
    
    //元组
    func tupleStudy() -> Void {
        //元组(Tuple): 定义变量的一个组合.
        
        /*
         定义有两种方式
         方式一：(一般)：(3, "", "swift")
         方式二：(前缀)：(day: 3, month: "", name: "Swift")
         */
        
        let (x,y,z) = (1, 2, 3)
        print("x = \(x),y = \(y), z = \(z)")
        
        let myTuple = (x: 1, y: 2, z: 3)

        print(myTuple.y)
    }
    
    //可选类型
    /*可选类型(Optional): 代表变量可能有值的情况。
    
    •	如：用户资料的选填部分，如住址/性别等辅助信息
    •	形式: var 变量 : 类型? ,默认是无值(nil)
    */
    func optionalStudy() -> Void {
        let addr: String? = "北京"
        print(addr)
    }
}
